[Amazon FSx for NetApp ONTAP] CIFSサーバーのNetBIOS Aliasでファイルサーバーの切り替えをしようとしてみた
CIFSサーバーにNetBIOS名のエイリアスを付与したいな
こんにちは、のんピ(@non____97)です。
皆さんはAmazon FSx for NetApp ONTAP(以降FSx for ONTAP)のCIFSサーバー(SMBサーバー)のNetBIOS名のエイリアスを設定したいなと思ったことはありますか? 私はあります。
ファイルサーバーの移行前後で同じUniversal Naming Convention(UNC)でアクセスできるようにしたいということがあると思います。
Amazon FSx for Windows File ServerではDNSエイリアスという機能があります。
これにより、FSx for Windows File Serverにアクセスするときの名前を複数指定することができます。この機能を活用することで、移行後も既存のファイルサーバーと同じUNCでアクセスすることが可能です。
FSx for ONTAPの場合、AWSマネジメントコンソール上から確認するとDNSエイリアスのような機能はないようでした。
ただし、NetApp公式ドキュメントを確認すると、CIFSサーバーにNetBIOS Aliasを設定できるようです。
NetBIOS エイリアスは、 SMB クライアントが SMB サーバに接続するときに使用できる SMB サーバの別名です。SMB サーバの NetBIOS エイリアスを設定すると、他のファイルサーバのデータを SMB サーバに統合して、 SMB サーバが元のファイルサーバの名前に応答するようにする場合に役立ちます。
SMB サーバの作成時または SMB サーバ作成後の任意の時点で、 NetBIOS エイリアスのリストを指定できます。リストへの NetBIOS エイリアスの追加や削除は、いつでも行うことができます。SMB サーバには NetBIOS エイリアスリスト内のどの名前を使用しても接続できます。
こちらの機能について調査してみたので紹介します。
いきなりまとめ
- CIFSサーバーにNetBIOS Aliasを設定してもDNSのCNAMEレコードやSPNは設定されない
- どちらも手動で設定する必要がある
- NetBIOSではなくDNSで名前解決を行う環境の場合はNetBIOS Aliasを使ったファイルサーバーの切り替えはできない
- SVMはデフォルトでLM、NTLM、NTLMv2、Kerberos認証をサポートしている
- Kerberos認証のみ許可することも可能
- ただしワークグループのCIFSサーバーはKerberos認証をサポートしていないので注意
- SPNの設定不足などでKerberos認証ができない場合はNTLMv2で認証される
- ファイルサーバーの移行前後で同じUNCでアクセスしたい場合はドメイン離脱・参加を活用する
DNSのCNAMEレコードを設定してアクセスできるか
検証環境
まず、CIFSサーバーのNetBIOS名について、DNSのCNAMEレコードを設定してSMBでアクセスできるかを確認してみます。
検証環境は以下の通りです。
SVMのCIFSサーバーのNetBIOS名について、DNSのCNAMEレコードを設定してSMBクライアントからSMBでアクセスできるか確認します。
AD DCについては以下記事の検証で使用したものを流用します。
使用するSVMは以下の通りです。
$ aws fsx describe-storage-virtual-machines --storage-virtual-machine-ids svm-00cef38f81500454f { "StorageVirtualMachines": [ { "ActiveDirectoryConfiguration": { "NetBiosName": "CIFS-SERVER", "SelfManagedActiveDirectoryConfiguration": { "DomainName": "CORP.NON-97.NET", "OrganizationalUnitDistinguishedName": "OU=FSxForONTAP,DC=corp,DC=non-97,DC=net", "UserName": "FSxServiceAccount", "DnsIps": [ "10.0.0.139" ] } }, "CreationTime": "2023-02-20T06:30:13.201000+00:00", "Endpoints": { "Iscsi": { "DNSName": "iscsi.svm-00cef38f81500454f.fs-05f72eb8f8d03c709.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.8.21", "10.0.8.192" ] }, "Management": { "DNSName": "svm-00cef38f81500454f.fs-05f72eb8f8d03c709.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.8.29" ] }, "Nfs": { "DNSName": "svm-00cef38f81500454f.fs-05f72eb8f8d03c709.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.8.29" ] }, "Smb": { "DNSName": "CIFS-SERVER.CORP.NON-97.NET", "IpAddresses": [ "10.0.8.29" ] } }, "FileSystemId": "fs-05f72eb8f8d03c709", "Lifecycle": "CREATED", "Name": "svm_1", "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-05f72eb8f8d03c709/svm-00cef38f81500454f", "StorageVirtualMachineId": "svm-00cef38f81500454f", "Subtype": "DEFAULT", "UUID": "122dacd1-b0e8-11ed-826e-c70dbf8a5f68" } ] }
CIFSサーバーのコンピューターオブジェクトが作成されていることを確認します。
> Get-ADComputer -Filter "Name -eq 'CIFS-SERVER'" -SearchBase "DC=corp,DC=non-97,DC=net" DistinguishedName : CN=CIFS-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net DNSHostName : CIFS-SERVER.CORP.NON-97.NET Enabled : True Name : CIFS-SERVER ObjectClass : computer ObjectGUID : 403216ab-1d39-4bf4-aefa-5796fa9c67ea SamAccountName : CIFS-SERVER$ SID : S-1-5-21-38571244-2121234638-1230449559-1601 UserPrincipalName :
また、CIFSサーバーのAレコードが登録されていることを確認します。
> Get-DnsServerResourceRecord -Name "CIFS-SERVER" -ZoneName "corp.non-97.net" HostName RecordType Type Timestamp TimeToLive RecordData -------- ---------- ---- --------- ---------- ---------- CIFS-SERVER A 1 2/20/2023 6:00:00 AM 1.00:00:00 10.0.8.29
SPN(Service Principal Name)が存在していることを確認します。
> SetSPN /Q ("HOST/CIFS-SERVER.corp.non-97.net") Checking domain DC=corp,DC=non-97,DC=net CN=CIFS-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net HOST/cifs-server.corp.non-97.net HOST/CIFS-SERVER Existing SPN found!
SPNはKerberos認証時に使用する一意な識別子です。
SPNの詳細は以下Microsoft公式ドキュメントをご覧ください。
DNSのCNAMEレコードを設定
CIFSサーバーのNetBIOS名について、DNSのCNAMEレコードを設定します。
今回はCIFS-ALIAS
というレコードにします。
# CNAMEレコードの追加 > Add-DnsServerResourceRecordCName -Name "CIFS-ALIAS" -HostNameAlias "CIFS-SERVER.corp.non-97.net" -ZoneName "corp.non-97.net" # CNAMEレコードが追加されたことを確認 > Get-DnsServerResourceRecord -Name "CIFS-ALIAS" -ZoneName "corp.non-97.net" HostName RecordType Type Timestamp TimeToLive RecordData -------- ---------- ---- --------- ---------- ---------- CIFS-ALIAS CNAME 5 0 01:00:00 CIFS-SERVER.corp.non-97.net.
名前解決できることも確認しておきます。
> nslookup CIFS-ALIAS.corp.non-97.net Server: localhost Address: ::1 Name: CIFS-SERVER.corp.non-97.net Address: 10.0.8.29 Aliases: CIFS-ALIAS.corp.non-97.net
SPNは未登録の状態です。
> SetSPN /Q ("HOST/CIFS-ALIAS.corp.non-97.net") Checking domain DC=corp,DC=non-97,DC=net No such SPN found.
マウント確認
それでは、CIFS-ALIAS
のルートボリュームのファイル共有c$
をSMBでマウントします。
> net use Z: \\CIFS-ALIAS.corp.non-97.net\c$ The command completed successfully. > Get-PSDrive -PSProvider FileSystem Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- C 15.82 14.18 FileSystem C:\ Users\Administrator.CORP Z 0.00 0.95 FileSystem \\CIFS-SERVER.corp.non-97.net\c$
マウントできました。
SPNが未登録であるのでKerberos認証に失敗してマウントできないかと思っていましたが、どうやら違うようです。
ONTAP CLIからcifs session showでSMBのセッションを確認してみます。
::> cifs session show Node: FsxId05f72eb8f8d03c709-01 Vserver: svm_1 Connection Session Open Idle Connection ID ID Workstation Windows User Files Time Count ---------- ------- ---------------- ---------------- --------- ------------ --------------- 793449704 4304033868882640907 2m 7s 1 10.0.0.167 CORP\ 1 Administrator ::> cifs session show -instance Vserver: svm_1 Node: FsxId05f72eb8f8d03c709-01 Session ID: 4304033868882640907 Connection ID: 793449704 Incoming Data LIF IP Address: 10.0.8.29 Workstation IP Address: 10.0.0.167 Authentication Mechanism: NTLMv2 User Authenticated as: domain-user Windows User: CORP\Administrator UNIX User: root Open Shares: 1 Open Files: 1 Open Other: 0 Connected Time: 2m 24s Idle Time: 2m 14s Protocol Version: SMB3_1 Continuously Available: No Is Session Signed: false NetBIOS Name: - SMB Encryption Status: unencrypted Large MTU Enabled: true Connection Count: 1 Active Shares: c$
Kerberos認証ではなく、NTLMv2で認証していますね。
SVMはデフォルトではLM、NTLM、NTLMv2、Kerberos認証をサポートしています。
cifs security showで確認すると、確かにLM、NTLM、NTLMv2、Kerberos認証をサポートするlm-ntlm-ntlmv2-krb
が指定されていました。
::> cifs security show -vserver svm_1 Vserver: svm_1 Kerberos Clock Skew: 5 minutes Kerberos Ticket Age: 10 hours Kerberos Renewal Age: 7 days Kerberos KDC Timeout: 3 seconds Is Signing Required: false Is Password Complexity Required: true Use start_tls for AD LDAP connection: false Is AES Encryption Enabled: false LM Compatibility Level: lm-ntlm-ntlmv2-krb Is SMB Encryption Required: false Client Session Security: none SMB1 Enabled for DC Connections: false SMB2 Enabled for DC Connections: system-default LDAP Referral Enabled For AD LDAP connections: false Use LDAPS for AD LDAP connection: false Encryption is required for DC Connections: false AES session key enabled for NetLogon channel: false Try Channel Binding For AD LDAP Connections: true
SPNが登録されていない場合はNTLMv2で認証しようとする様子をパケットキャプチャをして確認
SPNが登録されていない場合はNTLMv2で認証しようとする様子をSMBクライアントのWiresharkでパケットキャプチャをして確認します。
比較用にSPNが登録されているCIFS-SERVER
でアクセスする時のパケットをキャプチャします。
SMBクライアントからCIFS-SERVER
のc$
をYドライブにマウントします。
> net use Y: \\CIFS-SERVER.corp.non-97.net\c$ The command completed successfully. > Get-PSDrive -PSProvider FileSystem Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- C 15.82 14.17 FileSystem C:\ Users\Administrator.CORP Y 0.00 0.95 FileSystem \\CIFS-SERVER.corp.non-97.net\c$ Z 0.00 0.95 FileSystem \\CIFS-ALIAS.corp.non-97.net\c$
ONTAP CLIからSMBのセッションを確認します。
::> vserver cifs session show Node: FsxId05f72eb8f8d03c709-01 Vserver: svm_1 Connection Session Open Idle Connection ID ID Workstation Windows User Files Time Count ---------- ------- ---------------- ---------------- --------- ------------ --------------- 793449704 4304033868882640907 9m 17s 1 10.0.0.167 CORP\ 1 Administrator 793449705 4304033868882640908 25s 1 10.0.0.167 CORP\ 1 Administrator 2 entries were displayed. ::> cifs session show -instance Vserver: svm_1 Node: FsxId05f72eb8f8d03c709-01 Session ID: 4304033868882640907 Connection ID: 793449704 Incoming Data LIF IP Address: 10.0.8.29 Workstation IP Address: 10.0.0.167 Authentication Mechanism: NTLMv2 User Authenticated as: domain-user Windows User: CORP\Administrator UNIX User: root Open Shares: 1 Open Files: 1 Open Other: 0 Connected Time: 19m 4s Idle Time: 9m 31s Protocol Version: SMB3_1 Continuously Available: No Is Session Signed: false NetBIOS Name: - SMB Encryption Status: unencrypted Large MTU Enabled: true Connection Count: 1 Active Shares: c$ Node: FsxId05f72eb8f8d03c709-01 Session ID: 4304033868882640908 Connection ID: 793449705 Incoming Data LIF IP Address: 10.0.8.29 Workstation IP Address: 10.0.0.167 Authentication Mechanism: Kerberos User Authenticated as: domain-user Windows User: CORP\Administrator UNIX User: root Open Shares: 1 Open Files: 1 Open Other: 0 Connected Time: 49s Idle Time: 39s Protocol Version: SMB3_1 Continuously Available: No Is Session Signed: false NetBIOS Name: - SMB Encryption Status: unencrypted Large MTU Enabled: true Connection Count: 1 Active Shares: c$
Kerberos認証を使っていることが分かりますね。
それでは、この時のパケットを確認します。
すると、SMBのセッションを開始する前に、Ticket Granting Ticket (TGT)による認証リクエスト(KRB_TGS_REQ
)のレスポンスであるKRB_TGS_REP
があることが分かります。
No. Time Source Destination Protocol Length Info 255 6.319970 10.0.0.139 10.0.0.167 KRB5 379 TGS-REP Frame 255: 379 bytes on wire (3032 bits), 379 bytes captured (3032 bits) on interface \Device\NPF_{C818DC1E-F323-46C4-88F3-EC4CF1BEE8DA}, id 0 Ethernet II, Src: 0a:9b:85:2b:e9:21 (0a:9b:85:2b:e9:21), Dst: 0a:9c:58:74:f7:c9 (0a:9c:58:74:f7:c9) Internet Protocol Version 4, Src: 10.0.0.139, Dst: 10.0.0.167 Transmission Control Protocol, Src Port: 88, Dst Port: 64500, Seq: 1461, Ack: 1838, Len: 325 [2 Reassembled TCP Segments (1785 bytes): #254(1460), #255(325)] Kerberos Record Mark: 1781 bytes tgs-rep pvno: 5 msg-type: krb-tgs-rep (13) crealm: CORP.NON-97.NET cname ticket enc-part
- 10.0.8.29 : SVMのIPアドレス
- 10.0.0.139 : AD DCのIPアドレス
- 10.0.0.167 : SMBクライアントのIPアドレス
Kerberos認証のメッセージの種類はRFC 4120の 7.5.7. Kerberos Message Typesをご覧ください。
それでは本題のSPNが登録されていないCIFS-ALIAS
でアクセスする時のパケットをキャプチャします。
SMBクライアントからCIFS-ALIAS
のc$
をZドライブに再マウントします。
> net use Z: /delete Z: was deleted successfully. > net use Z: \\CIFS-ALIAS.corp.non-97.net\c$ The command completed successfully. > Get-PSDrive -PSProvider FileSystem Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- C 15.36 14.64 FileSystem C:\ Users\Administrator.CORP Y 0.00 0.95 FileSystem \\CIFS-SERVER.corp.non-97.net\c$ Z 0.00 0.95 FileSystem \\CIFS-ALIAS.corp.non-97.net\c$
ONTAP CLIからSMBのセッションを確認します。
::> cifs session show Node: FsxId05f72eb8f8d03c709-01 Vserver: svm_1 Connection Session Open Idle Connection ID ID Workstation Windows User Files Time Count ---------- ------- ---------------- ---------------- --------- ------------ --------------- 793449705 4304033868882640908 2m 54s 1 10.0.0.167 CORP\ 1 Administrator 793449706 4304033868882640909 2m 54s 1 10.0.0.167 CORP\ 1 Administrator 2 entries were displayed. ::> cifs session show -session-id 4304033868882640909 -instance Vserver: svm_1 Node: FsxId05f72eb8f8d03c709-01 Session ID: 4304033868882640909 Connection ID: 793449706 Incoming Data LIF IP Address: 10.0.8.29 Workstation IP Address: 10.0.0.167 Authentication Mechanism: NTLMv2 User Authenticated as: domain-user Windows User: CORP\Administrator UNIX User: root Open Shares: 1 Open Files: 1 Open Other: 0 Connected Time: 5m 10s Idle Time: 3m 59s Protocol Version: SMB3_1 Continuously Available: No Is Session Signed: false NetBIOS Name: - SMB Encryption Status: unencrypted Large MTU Enabled: true Connection Count: 1 Active Shares: c$
NTLMv2認証ですね。
それでは、この時のパケットを確認します。
すると、SMBのセッションを開始する前に、Ticket Granting Ticket (TGT)による認証リクエスト(KRB_TGS_REQ
)のレスポンスがKRB5KDC_ERR_S_PRINCIPAL_UNKNOWN
でエラーになっていることが分かります。その後、NTLMSSP_NEGOTIATE
とNTLMSSP_AUTH
でセッションを張りに行っていることが分かります。
No. Time Source Destination Protocol Length Info 101 3.460225 10.0.0.139 10.0.0.167 KRB5 169 KRB Error: KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN Frame 101: 169 bytes on wire (1352 bits), 169 bytes captured (1352 bits) on interface \Device\NPF_{C818DC1E-F323-46C4-88F3-EC4CF1BEE8DA}, id 0 Ethernet II, Src: 0a:9b:85:2b:e9:21 (0a:9b:85:2b:e9:21), Dst: 0a:9c:58:74:f7:c9 (0a:9c:58:74:f7:c9) Internet Protocol Version 4, Src: 10.0.0.139, Dst: 10.0.0.167 Transmission Control Protocol, Src Port: 88, Dst Port: 64881, Seq: 1, Ack: 1837, Len: 115 Source Port: 88 Destination Port: 64881 [Stream index: 2] [Conversation completeness: Complete, WITH_DATA (63)] [TCP Segment Len: 115] Sequence Number: 1 (relative sequence number) Sequence Number (raw): 900478016 [Next Sequence Number: 116 (relative sequence number)] Acknowledgment Number: 1837 (relative ack number) Acknowledgment number (raw): 788732745 0101 .... = Header Length: 20 bytes (5) Flags: 0x018 (PSH, ACK) Window: 8195 [Calculated window size: 2097920] [Window size scaling factor: 256] Checksum: 0x3224 [unverified] [Checksum Status: Unverified] Urgent Pointer: 0 [Timestamps] [SEQ/ACK analysis] TCP payload (115 bytes) [PDU Size: 115] Kerberos Record Mark: 111 bytes krb-error pvno: 5 msg-type: krb-error (30) stime: Feb 21, 2023 04:20:03.000000000 Coordinated Universal Time susec: 660659 error-code: eRR-S-PRINCIPAL-UNKNOWN (7) realm: CORP.NON-97.NET sname name-type: kRB5-NT-SRV-INST (2) sname-string: 2 items SNameString: cifs SNameString: CIFS-ALIAS.corp.non-97.net (中略) No. Time Source Destination Protocol Length Info 105 3.460583 10.0.0.167 10.0.8.29 SMB2 220 Session Setup Request, NTLMSSP_NEGOTIATE Frame 105: 220 bytes on wire (1760 bits), 220 bytes captured (1760 bits) on interface \Device\NPF_{C818DC1E-F323-46C4-88F3-EC4CF1BEE8DA}, id 0 Ethernet II, Src: 0a:9c:58:74:f7:c9 (0a:9c:58:74:f7:c9), Dst: 0a:cc:3c:d8:16:09 (0a:cc:3c:d8:16:09) Internet Protocol Version 4, Src: 10.0.0.167, Dst: 10.0.8.29 Transmission Control Protocol, Src Port: 64880, Dst Port: 445, Seq: 386, Ack: 559, Len: 166 Source Port: 64880 Destination Port: 445 [Stream index: 1] [Conversation completeness: Incomplete, DATA (15)] [TCP Segment Len: 166] Sequence Number: 386 (relative sequence number) Sequence Number (raw): 843739692 [Next Sequence Number: 552 (relative sequence number)] Acknowledgment Number: 559 (relative ack number) Acknowledgment number (raw): 2956947069 0101 .... = Header Length: 20 bytes (5) Flags: 0x018 (PSH, ACK) Window: 1024 [Calculated window size: 262144] [Window size scaling factor: 256] Checksum: 0x1d84 [unverified] [Checksum Status: Unverified] Urgent Pointer: 0 [Timestamps] [SEQ/ACK analysis] TCP payload (166 bytes) NetBIOS Session Service SMB2 (Server Message Block Protocol version 2) No. Time Source Destination Protocol Length Info 106 3.461355 10.0.8.29 10.0.0.167 SMB2 359 Session Setup Response, Error: STATUS_MORE_PROCESSING_REQUIRED, NTLMSSP_CHALLENGE Frame 106: 359 bytes on wire (2872 bits), 359 bytes captured (2872 bits) on interface \Device\NPF_{C818DC1E-F323-46C4-88F3-EC4CF1BEE8DA}, id 0 Ethernet II, Src: 0a:cc:3c:d8:16:09 (0a:cc:3c:d8:16:09), Dst: 0a:9c:58:74:f7:c9 (0a:9c:58:74:f7:c9) Internet Protocol Version 4, Src: 10.0.8.29, Dst: 10.0.0.167 Transmission Control Protocol, Src Port: 445, Dst Port: 64880, Seq: 559, Ack: 552, Len: 305 Source Port: 445 Destination Port: 64880 [Stream index: 1] [Conversation completeness: Incomplete, DATA (15)] [TCP Segment Len: 305] Sequence Number: 559 (relative sequence number) Sequence Number (raw): 2956947069 [Next Sequence Number: 864 (relative sequence number)] Acknowledgment Number: 552 (relative ack number) Acknowledgment number (raw): 843739858 0101 .... = Header Length: 20 bytes (5) Flags: 0x018 (PSH, ACK) Window: 257 [Calculated window size: 65792] [Window size scaling factor: 256] Checksum: 0x5176 [unverified] [Checksum Status: Unverified] Urgent Pointer: 0 [Timestamps] [SEQ/ACK analysis] TCP payload (305 bytes) NetBIOS Session Service SMB2 (Server Message Block Protocol version 2) No. Time Source Destination Protocol Length Info 107 3.461786 10.0.0.167 10.0.8.29 SMB2 674 Session Setup Request, NTLMSSP_AUTH, User: CORP\Administrator Frame 107: 674 bytes on wire (5392 bits), 674 bytes captured (5392 bits) on interface \Device\NPF_{C818DC1E-F323-46C4-88F3-EC4CF1BEE8DA}, id 0 Ethernet II, Src: 0a:9c:58:74:f7:c9 (0a:9c:58:74:f7:c9), Dst: 0a:cc:3c:d8:16:09 (0a:cc:3c:d8:16:09) Internet Protocol Version 4, Src: 10.0.0.167, Dst: 10.0.8.29 Transmission Control Protocol, Src Port: 64880, Dst Port: 445, Seq: 552, Ack: 864, Len: 620 Source Port: 64880 Destination Port: 445 [Stream index: 1] [Conversation completeness: Incomplete, DATA (15)] [TCP Segment Len: 620] Sequence Number: 552 (relative sequence number) Sequence Number (raw): 843739858 [Next Sequence Number: 1172 (relative sequence number)] Acknowledgment Number: 864 (relative ack number) Acknowledgment number (raw): 2956947374 0101 .... = Header Length: 20 bytes (5) Flags: 0x018 (PSH, ACK) Window: 1023 [Calculated window size: 261888] [Window size scaling factor: 256] Checksum: 0x1f4a [unverified] [Checksum Status: Unverified] Urgent Pointer: 0 [Timestamps] [SEQ/ACK analysis] TCP payload (620 bytes) NetBIOS Session Service SMB2 (Server Message Block Protocol version 2) No. Time Source Destination Protocol Length Info 108 3.488444 10.0.8.29 10.0.0.167 SMB2 145 Session Setup Response Frame 108: 145 bytes on wire (1160 bits), 145 bytes captured (1160 bits) on interface \Device\NPF_{C818DC1E-F323-46C4-88F3-EC4CF1BEE8DA}, id 0 Ethernet II, Src: 0a:cc:3c:d8:16:09 (0a:cc:3c:d8:16:09), Dst: 0a:9c:58:74:f7:c9 (0a:9c:58:74:f7:c9) Internet Protocol Version 4, Src: 10.0.8.29, Dst: 10.0.0.167 Transmission Control Protocol, Src Port: 445, Dst Port: 64880, Seq: 864, Ack: 1172, Len: 91 Source Port: 445 Destination Port: 64880 [Stream index: 1] [Conversation completeness: Incomplete, DATA (15)] [TCP Segment Len: 91] Sequence Number: 864 (relative sequence number) Sequence Number (raw): 2956947374 [Next Sequence Number: 955 (relative sequence number)] Acknowledgment Number: 1172 (relative ack number) Acknowledgment number (raw): 843740478 0101 .... = Header Length: 20 bytes (5) Flags: 0x018 (PSH, ACK) Window: 257 [Calculated window size: 65792] [Window size scaling factor: 256] Checksum: 0xa8f4 [unverified] [Checksum Status: Unverified] Urgent Pointer: 0 [Timestamps] [SEQ/ACK analysis] TCP payload (91 bytes) NetBIOS Session Service SMB2 (Server Message Block Protocol version 2)
KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN
はSPNに誤りがある場合に発生するエラーです。
AD FS サービス アカウントの SPN に、構成の誤りや間違いがある場合は、問題が発生する可能性があります。 ネットワーク トレースを参照すると、KRB エラー: KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN のようなエラーが表示されていることがあります。
以上の挙動から確かにKerberos認証に失敗すると、NTLMv2で認証しようとすることが分かりました。
そして、Kerberos認証をする際にはSPNが重要ということも理解できました。NetAppのKBにも解決策としてSPNを設定するような記載があります。
また、NTLMv2の認証の挙動は以下NetAppのKBとMicrosoft公式ドキュメントが参考になります。
SVMでKerberos認証のみ許可している場合の挙動の確認
ふと、SVMでKerberos認証のみ許可している場合の挙動が気になったので確認してみます。
ONTAP CLIでSVMでKerberos認証のみ許可します。
# Kerberos認証のみ許可 ::> cifs security modify -vserver svm_1 -lm-compatibility-level krb # Kerberos認証のみ許可されているか確認 ::> cifs security show -vserver svm_1 -fields lm-compatibility-level vserver lm-compatibility-level ------- ---------------------- svm_1 krb # NTLMv2で認証したセッションが切れていないことを確認 ::> cifs session show -session-id 4304033868882640909 -instance Vserver: svm_1 Node: FsxId05f72eb8f8d03c709-01 Session ID: 4304033868882640909 Connection ID: 793449706 Incoming Data LIF IP Address: 10.0.8.29 Workstation IP Address: 10.0.0.167 Authentication Mechanism: NTLMv2 User Authenticated as: domain-user Windows User: CORP\Administrator UNIX User: root Open Shares: 1 Open Files: 1 Open Other: 0 Connected Time: 24m 29s Idle Time: 8m 2s Protocol Version: SMB3_1 Continuously Available: No Is Session Signed: false NetBIOS Name: - SMB Encryption Status: unencrypted Large MTU Enabled: true Connection Count: 1 Active Shares: c$
この状態でSMBクライアントからCIFS-ALIAS
のc$
をZドライブに再マウントします。
> net use Z: /delete Z: was deleted successfully. > net use Z: \\CIFS-ALIAS.corp.non-97.net\c$ Enter the user name for 'CIFS-ALIAS.corp.non-97.net': corp.non-97.net\Administrator Enter the password for CIFS-ALIAS.corp.non-97.net: System error 86 has occurred. The specified network password is not correct.
認証を求められましたが、拒否されてしまいました。
NTLM認証は推奨されていません。
NTLM does not support any recent cryptographic methods, such as AES or SHA-256. It uses cyclic redundancy check (CRC) or message digest algorithms ([RFC1321]) for integrity, and it uses RC4 for encryption. Deriving a key from a password is as specified in [RFC1320] and [FIPS46-2]. Therefore, applications are generally advised not to use NTLM.
(以下機械翻訳)
NTLM は AES や SHA-256 といった最新の暗号化方式をサポートしていない。完全性については、巡回冗長検査(CRC)もしくはメッセージダイジェストのアルゴリズム([RFC1321])を用いており、暗号化については RC4 を用いている。パスワードからの鍵の導出は、[RFC1320]と[FIPS46-2]で規定されている通りである。このため、一般にアプリケーションでは NTLM を使用しないことが推奨される。
[MS-NLMP]: Security Considerations for Implementers | Microsoft Learn
Pass the Hash対策や通信を暗号化したい場合はKerberos認証以外は許可しないというのも良いと思います。ただしワークグループのCIFSサーバーはKerberos認証はサポートされていないので注意しましょう。
ワークグループモードの SMB サーバでは、 NTLM 認証のみがサポートされます。Kerberos 認証はサポートされません。
NetBIOS Aliasを試してみる
それでは、NetBIOS Aliasを試してみます。
自動でCNAMEレコードやSPNが登録されることを期待しています。
事前準備として登録していたCNAMEレコードを削除します。
# CNAMEレコードの削除 > Remove-DnsServerResourceRecord -Name "CIFS-ALIAS" -ZoneName "corp.non-97.net" -RRType "CNAME" Confirm Removing DNS resource record set by name CIFS-ALIAS of type CNAME from zone corp.non-97.net on EC2AMAZ-75JBQCK server. Do you want to continue? [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y # CNAMEレコードが削除されたことを確認 > Get-DnsServerResourceRecord -Name "CIFS-ALIAS" -ZoneName "corp.non-97.net" Get-DnsServerResourceRecord : Failed to get CIFS-ALIAS record in corp.non-97.net zone on EC2AMAZ-75JBQCK server. At line:1 char:1 + Get-DnsServerResourceRecord -Name "CIFS-ALIAS" -ZoneName "corp.non-97.net" ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (CIFS-ALIAS:root/Microsoft/...rResourceRecord) [Get-DnsServerResourceRecord], CimException + FullyQualifiedErrorId : WIN32 9714,Get-DnsServerResourceRecord
以下NetApp公式ドキュメントに従ってONTAP CLIでNetBIOS AliasとしてCIFS-ALIAS
を追加します。
# NetBIOS Aliasが設定されていないことを確認 ::> cifs show -vserver svm_1 Vserver: svm_1 CIFS Server NetBIOS Name: CIFS-SERVER NetBIOS Domain/Workgroup Name: CORP Fully Qualified Domain Name: CORP.NON-97.NET Organizational Unit: OU=FSxForONTAP,DC=corp,DC=non-97,DC=net Default Site Used by LIFs Without Site Membership: Workgroup Name: - Authentication Style: domain CIFS Server Administrative Status: up CIFS Server Description: List of NetBIOS Aliases: - # NetBIOS Aliasとして CIFS-ALIAS を追加 ::> cifs add-netbios-aliases -vserver svm_1 -netbios-aliases CIFS-ALIAS # NetBIOS Aliasが設定されたことを確認 ::> cifs show -vserver svm_1 Vserver: svm_1 CIFS Server NetBIOS Name: CIFS-SERVER NetBIOS Domain/Workgroup Name: CORP Fully Qualified Domain Name: CORP.NON-97.NET Organizational Unit: OU=FSxForONTAP,DC=corp,DC=non-97,DC=net Default Site Used by LIFs Without Site Membership: Workgroup Name: - Authentication Style: domain CIFS Server Administrative Status: up CIFS Server Description: List of NetBIOS Aliases: CIFS-ALIAS
NetBIOS Alias追加後にSPNを確認します。
> SetSPN /Q ("HOST/CIFS-ALIAS.corp.non-97.net") Checking domain DC=corp,DC=non-97,DC=net No such SPN found.
設定されていないですね。
CIFS-ALIAS
について名前解決できるか確認します。
> nslookup CIFS-ALIAS Server: localhost Address: ::1 *** localhost can't find CIFS-ALIAS: Non-existent domain # CIFS-ALIAS というDNSレコードがあるか確認 > Get-ADComputer -Filter "Name -eq 'CIFS-ALIAS'" -SearchBase "DC=corp,DC=non-97,DC=net"
名前解決できませんでした。
NetBIOS Aliasはもしかするとその名の通りNetBIOSで名前解決するときに使われる設定値かもしれませんね。今回はDNSで名前解決をしていないため設定したとしても何も効果がない可能性があります。
SPNとCNAMEレコードの登録してSMBでマウントできるか
DNSによる名前解決をしている場合はNetBIOS Aliasが効かなさそうということが分かりました。
FSx for Windows File ServerのDNSエイリアスの設定手順を参考にSPNとCNAMEレコードを登録して、SMBでマウントできるか確認します。
まず、SPNの登録です。
# SPNの登録 > $FSxDnsName = "CIFS-SERVER.corp.non-97.net" > $Alias = "CIFS-ALIAS.corp.non-97.net" > $FileSystemHost = (Resolve-DnsName $FSxDnsName | Where Type -eq 'A')[0].Name.Split(".")[0] > $FSxAdComputer = (Get-AdComputer -Identity $FileSystemHost) > Set-AdComputer -Identity $FSxAdComputer -Add @{"msDS-AdditionalDnsHostname"="$Alias"} # SPNが登録されたことを確認 > SetSPN /Q ("HOST/CIFS-ALIAS.corp.non-97.net") Checking domain DC=corp,DC=non-97,DC=net CN=CIFS-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net HOST/CIFS-ALIAS.corp.non-97.net HOST/CIFS-ALIAS HOST/cifs-server.corp.non-97.net HOST/CIFS-SERVER Existing SPN found!
SPNの登録が完了しました。次にCNAMEレコードの登録です。
# CNAMEレコードの追加 > Add-DnsServerResourceRecordCName -Name "CIFS-ALIAS" -HostNameAlias "CIFS-SERVER.corp.non-97.net" -ZoneName "corp.non-97.net" # CNAMEレコードが追加されたことを確認 > Get-DnsServerResourceRecord -Name "CIFS-ALIAS" -ZoneName "corp.non-97.net" HostName RecordType Type Timestamp TimeToLive RecordData -------- ---------- ---- --------- ---------- ---------- CIFS-ALIAS CNAME 5 0 01:00:00 CIFS-SERVER.corp.non-97.net. # 名前解決できることを確認 > nslookup CIFS-ALIAS Server: localhost Address: ::1 Name: CIFS-SERVER.corp.non-97.net Address: 10.0.8.29 Aliases: CIFS-ALIAS.corp.non-97.net
この状態でSMBクライアントからCIFS-ALIAS
のc$
をZドライブにマウントします。
> net use Z: \\CIFS-ALIAS.corp.non-97.net\c$ The command completed successfully. > Get-PSDrive -PSProvider FileSystem Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- C 15.36 14.64 FileSystem C:\ Users\Administrator.CORP Y 0.00 0.95 FileSystem \\CIFS-SERVER.corp.non-97.net\c$ Z 0.00 0.95 FileSystem \\CIFS-ALIAS.corp.non-97.net\c$
エイリアスに対してマウントできましたね。
ONTAP CLIからSMBのセッションを確認します。
::> cifs session show Node: FsxId05f72eb8f8d03c709-01 Vserver: svm_1 Connection Session Open Idle Connection ID ID Workstation Windows User Files Time Count ---------- ------- ---------------- ---------------- --------- ------------ --------------- 793449705 4304033868882640908 40s 1 10.0.0.167 CORP\ 1 Administrator 793449715 4304033868882640910 38s 1 10.0.0.167 CORP\ 1 Administrator 2 entries were displayed. ::> cifs session show -session-id 4304033868882640910 -instance Vserver: svm_1 Node: FsxId05f72eb8f8d03c709-01 Session ID: 4304033868882640910 Connection ID: 793449715 Incoming Data LIF IP Address: 10.0.8.29 Workstation IP Address: 10.0.0.167 Authentication Mechanism: Kerberos User Authenticated as: domain-user Windows User: CORP\Administrator UNIX User: root Open Shares: 1 Open Files: 1 Open Other: 0 Connected Time: 1m 6s Idle Time: 55s Protocol Version: SMB3_1 Continuously Available: No Is Session Signed: false NetBIOS Name: - SMB Encryption Status: unencrypted Large MTU Enabled: true Connection Count: 1 Active Shares: c$
Kerberos認証で接続できていることが分かります。NetBIOS Name
は-
となっていますね。やはりNetBIOSで名前解決したときでなければNetBIOS Aliasの効果は発揮されないのでしょうか。
NetBIOS Aliasを削除した状態でもエイリアスに対してSMBでマウントできるか
せっかくなのでNetBIOS Aliasを削除した状態でもエイリアスに対してSMBでマウントできるかも確認します。
ONTAP CLIでNetBIOS Aliasを削除します。
# NetBIOS Aliasを削除 ::> cifs remove-netbios-aliases -vserver svm_1 -netbios-aliases - Warning: This command will remove all NetBIOS aliases configured for the CIFS server. Do you want to continue? {y|n}: y # NetBIOS Aliasが設定されていないことを確認 ::> cifs show -vserver svm_1 -fields netbios-aliases vserver netbios-aliases ------- --------------- svm_1 -
この状態でSMBクライアントからCIFS-ALIAS
のc$
をZドライブに再マウントします。
> net use Z: /delete Z: was deleted successfully. > net use Z: \\CIFS-ALIAS.corp.non-97.net\c$ The command completed successfully.
問題なくマウントできました。
ONTAP CLIからSMBのセッションを確認します。
::> cifs session show -session-id 4304033868882640911 -instance Vserver: svm_1 Node: FsxId05f72eb8f8d03c709-01 Session ID: 4304033868882640911 Connection ID: 793449716 Incoming Data LIF IP Address: 10.0.8.29 Workstation IP Address: 10.0.0.167 Authentication Mechanism: Kerberos User Authenticated as: domain-user Windows User: CORP\Administrator UNIX User: root Open Shares: 1 Open Files: 1 Open Other: 0 Connected Time: 11m 25s Idle Time: 44s Protocol Version: SMB3_1 Continuously Available: No Is Session Signed: false NetBIOS Name: - SMB Encryption Status: unencrypted Large MTU Enabled: true Connection Count: 1 Active Shares: c$
Kerberos認証で接続できていますね。
SVM間でNetBIOS名の引き継ぎ
検証環境
NetBIOS Aliasと全く関係ないですが、SVM間でNetBIOS名の引き継ぎできるかが気になったので確認してみます。
検証環境は以下の通りです。
NetBIOS名がCIFS-SERVER-2
のSVM(svm_2
)のNetBIOS名をCIFS-SERVER
に変更できるか検証します。
大まかなステップは以下になります。
svm_1
をドメインから離脱svm_2
をドメインから離脱svm_2
をCIFS-SERVER
としてドメインに参加
本来のファイルサーバー移行であれば、新旧ファイルサーバー間でファイルの移行が必要になるので、どちらもドメインへの参加が必要だと考えます。そしてファイルが完全に同期が取れたタイミングで、どちらのファイルサーバーもドメインから離脱して新ファイルサーバーを旧ファイルサーバーのホスト名で再参加することになると考えます。
検証で使用するsvm_2
は以下の通りです。
$ aws fsx describe-storage-virtual-machines --storage-virtual-machine-ids svm-0f9f29b94d409fbd0 { "StorageVirtualMachines": [ { "ActiveDirectoryConfiguration": { "NetBiosName": "CIFS-SERVER-2", "SelfManagedActiveDirectoryConfiguration": { "DomainName": "CORP.NON-97.NET", "OrganizationalUnitDistinguishedName": "OU=FSxForONTAP,DC=corp,DC=non-97,DC=net", "UserName": "FSxServiceAccount", "DnsIps": [ "10.0.0.139" ] } }, "CreationTime": "2023-02-20T06:33:24.632000+00:00", "Endpoints": { "Iscsi": { "DNSName": "iscsi.svm-0f9f29b94d409fbd0.fs-05f72eb8f8d03c709.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.8.35", "10.0.8.127" ] }, "Management": { "DNSName": "svm-0f9f29b94d409fbd0.fs-05f72eb8f8d03c709.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.8.67" ] }, "Nfs": { "DNSName": "svm-0f9f29b94d409fbd0.fs-05f72eb8f8d03c709.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "10.0.8.67" ] }, "Smb": { "DNSName": "CIFS-SERVER-2.CORP.NON-97.NET", "IpAddresses": [ "10.0.8.67" ] } }, "FileSystemId": "fs-05f72eb8f8d03c709", "Lifecycle": "CREATED", "Name": "svm_2", "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-05f72eb8f8d03c709/svm-0f9f29b94d409fbd0", "StorageVirtualMachineId": "svm-0f9f29b94d409fbd0", "Subtype": "DEFAULT", "UUID": "8159c8f9-b0e8-11ed-826e-c70dbf8a5f68" } ] }
svm_2
のCIFSサーバーのコンピューターオブジェクトが作成されていることを確認します。
> Get-ADComputer -Filter "Name -eq 'CIFS-SERVER-2'" -SearchBase "DC=corp,DC=non-97,DC=net" DistinguishedName : CN=CIFS-SERVER-2,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net DNSHostName : CIFS-SERVER-2.CORP.NON-97.NET Enabled : True Name : CIFS-SERVER-2 ObjectClass : computer ObjectGUID : 7cc76c76-81e3-4d98-8152-265a91eb9696 SamAccountName : CIFS-SERVER-2$ SID : S-1-5-21-38571244-2121234638-1230449559-1602 UserPrincipalName :
svm_2
のCIFSサーバーのAレコードが登録されていることを確認します。
> Get-DnsServerResourceRecord -Name "CIFS-SERVER-2" -ZoneName "corp.non-97.net" HostName RecordType Type Timestamp TimeToLive RecordData -------- ---------- ---- --------- ---------- ---------- CIFS-SERVER-2 A 1 2/20/2023 6:00:00 AM 1.00:00:00 10.0.8.67
CIFS-SERVER-2
のSPNが存在していることを確認します。
> SetSPN /Q ("HOST/CIFS-SERVER-2.corp.non-97.net") Checking domain DC=corp,DC=non-97,DC=net CN=CIFS-SERVER-2,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net HOST/cifs-server-2.corp.non-97.net HOST/CIFS-SERVER-2 Existing SPN found!
検証用ファイルの作成
CIFS-SERVER
にアクセスしたときに、どちらのSVMなのか分かるように検証用のファイルを作成します。
# CIFS-SERVER-2 の c$ をXドライブにマウント > net use X: \\CIFS-SERVER-2.corp.non-97.net\c$ The command completed successfully. > Get-PSDrive -PSProvider FileSystem Name Used (GB) Free (GB) Provider Root CurrentLocation ---- --------- --------- -------- ---- --------------- C 15.34 14.66 FileSystem C:\ Users\Administrator.CORP X 0.00 0.95 FileSystem \\CIFS-SERVER-2.corp.non-97.net\c$ Y 0.00 0.95 FileSystem \\CIFS-SERVER.corp.non-97.net\c$ Z 0.00 0.95 FileSystem \\CIFS-ALIAS.corp.non-97.net\c$ # 各ファイル共有に検証用ファイルを追加 > echo "test" > Y:\test-svm_1.txt > echo "test" > X:\test-svm_2.txt
各SVMのドメイン離脱
svm_1
とsvm_2
をドメインから離脱させます。
まずsvm_1
をドメインから離脱させます。
# ドメインから離脱 ::> cifs modify -vserver svm_1 -cifs-server CIFS-SERVER -workgroup WORKGROUP -status-admin down Error: command failed: This operation is not supported because lm-compatibility-level is set to 'krb' only. Use the 'vserver cifs security' command to modify the lm-compatibility-level. # Kerberos認証以外も認証で使えるように変更 ::> cifs security modify -vserver svm_1 -lm-compatibility-level lm-ntlm-ntlmv2-krb # ドメインから離脱 :> cifs modify -vserver svm_1 -cifs-server CIFS-SERVER -workgroup WORKGROUP -status-admin down Warning: To enter workgroup mode, all domain-based features must be disabled and their configuration removed automatically by the system, including continuously-available shares and shadow copies. However, domain-configured share ACLs such as "CORP.NON-97.NET\userName" will not work properly, but cannot be removed by Data ONTAP. Remove these share ACLs as soon as possible using external tools after the command completes. Do you want to continue? {y|n}: y Successfully queued CIFS Server Modify job [id: 835] for CIFS server "CIFS-SERVER". To view the status of the job, use the "job show -id <jobid>" command. # ドメインから離脱したことを確認 ::> cifs show -vserver svm_1 Vserver: svm_1 CIFS Server NetBIOS Name: CIFS-SERVER NetBIOS Domain/Workgroup Name: WORKGROUP Fully Qualified Domain Name: - Organizational Unit: - Default Site Used by LIFs Without Site Membership: - Workgroup Name: WORKGROUP Authentication Style: workgroup CIFS Server Administrative Status: up CIFS Server Description: List of NetBIOS Aliases: -
事前にKerberos認証以外も認証できるようにする必要があるのがポイントですね。
同様にsvm_2
をドメインから離脱させます。
# ドメインから離脱 ::> cifs modify -vserver svm_2 -cifs-server CIFS-SERVER-2 -workgroup WORKGROUP -status-admin down Warning: To enter workgroup mode, all domain-based features must be disabled and their configuration removed automatically by the system, including continuously-available shares and shadow copies. However, domain-configured share ACLs such as "CORP.NON-97.NET\userName" will not work properly, but cannot be removed by Data ONTAP. Remove these share ACLs as soon as possible using external tools after the command completes. Do you want to continue? {y|n}: y Successfully queued CIFS Server Modify job [id: 836] for CIFS server "CIFS-SERVER-2". To view the status of the job, use the "job show -id <jobid>" command. # ドメインから離脱したことを確認 ::> cifs show -vserver svm_2 Vserver: svm_2 CIFS Server NetBIOS Name: CIFS-SERVER-2 NetBIOS Domain/Workgroup Name: WORKGROUP Fully Qualified Domain Name: - Organizational Unit: - Default Site Used by LIFs Without Site Membership: - Workgroup Name: WORKGROUP Authentication Style: workgroup CIFS Server Administrative Status: up CIFS Server Description: List of NetBIOS Aliases: -
ドメイン離脱後、それぞれのコンピューターオブジェクト、Aレコード、SPNを確認します。
# コンピューターオブジェクトの確認 # CIFS-SERVER > Get-ADComputer -Filter "Name -eq 'CIFS-SERVER'" -SearchBase "DC=corp,DC=non-97,DC=net" DistinguishedName : CN=CIFS-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net DNSHostName : CIFS-SERVER.CORP.NON-97.NET Enabled : True Name : CIFS-SERVER ObjectClass : computer ObjectGUID : 403216ab-1d39-4bf4-aefa-5796fa9c67ea SamAccountName : CIFS-SERVER$ SID : S-1-5-21-38571244-2121234638-1230449559-1601 UserPrincipalName : # CIFS-SERVER-2 > Get-ADComputer -Filter "Name -eq 'CIFS-SERVER-2'" -SearchBase "DC=corp,DC=non-97,DC=net" DistinguishedName : CN=CIFS-SERVER-2,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net DNSHostName : CIFS-SERVER-2.CORP.NON-97.NET Enabled : True Name : CIFS-SERVER-2 ObjectClass : computer ObjectGUID : 7cc76c76-81e3-4d98-8152-265a91eb9696 SamAccountName : CIFS-SERVER-2$ SID : S-1-5-21-38571244-2121234638-1230449559-1602 UserPrincipalName : # Aレコードの確認 # CIFS-SERVER > Get-DnsServerResourceRecord -Name "CIFS-SERVER" -ZoneName "corp.non-97.net" HostName RecordType Type Timestamp TimeToLive RecordData -------- ---------- ---- --------- ---------- ---------- CIFS-SERVER A 1 2/20/2023 6:00:00 AM 1.00:00:00 10.0.8.29 # CIFS-SERVER-2 > Get-DnsServerResourceRecord -Name "CIFS-SERVER-2" -ZoneName "corp.non-97.net" Get-DnsServerResourceRecord : Failed to get CIFS-SERVER-2 record in corp.non-97.net zone on EC2AMAZ-75JBQCK server. At line:1 char:1 + Get-DnsServerResourceRecord -Name "CIFS-SERVER-2" -ZoneName "corp.non-97.net" ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (CIFS-SERVER-2:root/Microsoft/...rResourceRecord) [Get-DnsServerResourceRecord], CimException + FullyQualifiedErrorId : WIN32 9714,Get-DnsServerResourceRecord # SPN # CIFS-SERVER > SetSPN /Q ("HOST/CIFS-SERVER.corp.non-97.net") Checking domain DC=corp,DC=non-97,DC=net CN=CIFS-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net HOST/CIFS-ALIAS.corp.non-97.net HOST/CIFS-ALIAS HOST/cifs-server.corp.non-97.net HOST/CIFS-SERVER Existing SPN found! # CIFS-SERVER-2 > SetSPN /Q ("HOST/CIFS-SERVER-2.corp.non-97.net") Checking domain DC=corp,DC=non-97,DC=net CN=CIFS-SERVER-2,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net HOST/cifs-server-2.corp.non-97.net HOST/CIFS-SERVER-2 Existing SPN found!
ドメインから離脱したタイミングでCIFS-SERVER-2
のAレコードが削除されていました。もしかするとCNAMEレコードから参照されているAレコードはドメインから離脱しても削除されないのかもしれないですね。
その他のリソースについては削除されていませんでした。
このタイミングで各ファイル共有にアクセスしてみます。
# CIFS-SERVER > ls Y:\ ls : Cannot find path 'Y:\' because it does not exist. At line:1 char:1 + ls Y:\ + ~~~~~~ + CategoryInfo : ObjectNotFound: (Y:\:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand # CIFS-SERVER-2 > ls X:\ ls : Cannot find path 'X:\' because it does not exist. At line:1 char:1 + ls X:\ + ~~~~~~ + CategoryInfo : ObjectNotFound: (X:\:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
どちらもアクセスできませんでした。
svm_2のドメイン参加
svm_2
をCIFS-SERVER
としてドメイン参加させます。
ドメイン参加は以下記事を参考に行います。
# svm_2 を CIFS-SERVER としてドメイン参加 ::> cifs modify -vserver svm_2 -cifs-server CIFS-SERVER -domain corp.non-97.net -ou OU=FSxForONTAP,DC=corp,DC=non-97,DC=net -status-admin down In order to create an Active Directory machine account for the CIFS server, you must supply the name and password of a Windows account with sufficient privileges to add computers to the "OU=FSxForONTAP,DC=corp,DC=non-97,DC=net" container within the "CORP.NON-97.NET" domain. Enter the user name: FSxServiceAccount Enter the password: Warning: An account by this name already exists in Active Directory at CN=CIFS-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net. If there is an existing DNS entry for the name CIFS-SERVER, it must be removed. Data ONTAP cannot remove such an entry. Use an external tool to remove it after this command completes. Ok to reuse this account? {y|n}: y Successfully queued CIFS Server Modify job [id: 837] for CIFS server "CIFS-SERVER". To view the status of the job, use the "job show -id <jobid>" command. # ドメイン参加できたことを確認 ::> cifs show -vserver svm_2 Vserver: svm_2 CIFS Server NetBIOS Name: CIFS-SERVER NetBIOS Domain/Workgroup Name: CORP Fully Qualified Domain Name: CORP.NON-97.NET Organizational Unit: OU=FSxForONTAP,DC=corp,DC=non-97,DC=net Default Site Used by LIFs Without Site Membership: Workgroup Name: - Authentication Style: domain CIFS Server Administrative Status: up CIFS Server Description: List of NetBIOS Aliases: -
ドメイン参加後、CIFS-SERVER
とCIFS-SERVER-2
のコンピューターオブジェクト、Aレコード、SPNを確認します。
# コンピューターオブジェクトの確認 # CIFS-SERVER > Get-ADComputer -Filter "Name -eq 'CIFS-SERVER'" -SearchBase "DC=corp,DC=non-97,DC=net" DistinguishedName : CN=CIFS-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net DNSHostName : cifs-server.corp.non-97.net Enabled : True Name : CIFS-SERVER ObjectClass : computer ObjectGUID : 403216ab-1d39-4bf4-aefa-5796fa9c67ea SamAccountName : CIFS-SERVER$ SID : S-1-5-21-38571244-2121234638-1230449559-1601 UserPrincipalName : # CIFS-SERVER-2 > Get-ADComputer -Filter "Name -eq 'CIFS-SERVER-2'" -SearchBase "DC=corp,DC=non-97,DC=net" DistinguishedName : CN=CIFS-SERVER-2,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net DNSHostName : CIFS-SERVER-2.CORP.NON-97.NET Enabled : True Name : CIFS-SERVER-2 ObjectClass : computer ObjectGUID : 7cc76c76-81e3-4d98-8152-265a91eb9696 SamAccountName : CIFS-SERVER-2$ SID : S-1-5-21-38571244-2121234638-1230449559-1602 UserPrincipalName : # Aレコードの確認 # CIFS-SERVER > Get-DnsServerResourceRecord -Name "CIFS-SERVER" -ZoneName "corp.non-97.net" HostName RecordType Type Timestamp TimeToLive RecordData -------- ---------- ---- --------- ---------- ---------- CIFS-SERVER A 1 2/21/2023 9:00:00 AM 1.00:00:00 10.0.8.67 CIFS-SERVER A 1 2/20/2023 6:00:00 AM 1.00:00:00 10.0.8.29 # CIFS-SERVER-2 > Get-DnsServerResourceRecord -Name "CIFS-SERVER-2" -ZoneName "corp.non-97.net" Get-DnsServerResourceRecord : Failed to get CIFS-SERVER-2 record in corp.non-97.net zone on EC2AMAZ-75JBQCK server. At line:1 char:1 + Get-DnsServerResourceRecord -Name "CIFS-SERVER-2" -ZoneName "corp.non-97.net" ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (CIFS-SERVER-2:root/Microsoft/...rResourceRecord) [Get-DnsServerResourceRecord], CimException + FullyQualifiedErrorId : WIN32 9714,Get-DnsServerResourceRecord # SPN # CIFS-SERVER > SetSPN /Q ("HOST/CIFS-SERVER.corp.non-97.net") Checking domain DC=corp,DC=non-97,DC=net CN=CIFS-SERVER,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net HOST/cifs-server.corp.non-97.net HOST/CIFS-SERVER Existing SPN found! # CIFS-SERVER-2 > SetSPN /Q ("HOST/CIFS-SERVER-2.corp.non-97.net") Checking domain DC=corp,DC=non-97,DC=net CN=CIFS-SERVER-2,OU=FSxForONTAP,DC=corp,DC=non-97,DC=net HOST/cifs-server-2.corp.non-97.net HOST/CIFS-SERVER-2 Existing SPN found!
CIFS-SERVER
のAレコードとしてsvm_2
のIPアドレスが追加されていますね。
また、CIFS-SERVER
のSPNからHOST/CIFS-ALIAS.corp.non-97.net
とHOST/CIFS-ALIAS
が削除されていました。その他は変わりありませんでした。
アクセス確認
それではCIFS-SERVER
にアクセスできるか確認します。
# CIFS-SERVER にアクセス > ls Y:\ ls : Cannot find path 'Y:\' because it does not exist. At line:1 char:1 + ls Y:\ + ~~~~~~ + CategoryInfo : ObjectNotFound: (Y:\:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand # CIFS-SERVER への接続を解除 > net use Y: /delete Y: was deleted successfully. # CIFS-SERVER に再接続 > net use Y: \\CIFS-SERVER.corp.non-97.net\c$ (待てども接続できず)
CIFS-SERVER
に接続できませんでした。
原因はAレコードにsvm_1
とsvm_2
の2つのIPアドレスが付与されているためです。svm_1
のIPアドレスのAレコードを削除して、再接続してみます。
# CIFS-SERVER を名前解決 > nslookup CIFS-SERVER.corp.non-97.net Server: ip-10-0-0-139.ec2.internal Address: 10.0.0.139 Name: CIFS-SERVER.corp.non-97.net Addresses: 10.0.8.67 10.0.8.29 # svm_1 のIPアドレスについてのAレコードを削除 > Remove-DnsServerResourceRecord -ZoneName "corp.non-97.net" -RRType "A" -Name "CIFS-SERVER" -RecordData "10.0.8.29" Confirm Removing DNS resource record CIFS-SERVER of type A from zone corp.non-97.net on EC2AMAZ-75JBQCK server. Do you want to continue? [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y # Aレコードが1つになっていることを確認 > Get-DnsServerResourceRecord -Name "CIFS-SERVER" -ZoneName "corp.non-97.net" HostName RecordType Type Timestamp TimeToLive RecordData -------- ---------- ---- --------- ---------- ---------- CIFS-SERVER A 1 2/21/2023 9:00:00 AM 1.00:00:00 10.0.8.67 # 名前解決の回答が1つになっていることを確認 > nslookup CIFS-SERVER.corp.non-97.net Server: ip-10-0-0-139.ec2.internal Address: 10.0.0.139 Name: CIFS-SERVER.corp.non-97.net Address: 10.0.8.67 # DNSのキャッシュを削除 > ipconfig /flushdns Windows IP Configuration Successfully flushed the DNS Resolver Cache. # CIFS-SERVER の c$ をYドライブにマウント > net use Y: \\CIFS-SERVER.corp.non-97.net\c$ The command completed successfully. # Yドライブにアクセス > ls Y:\ Directory: Y:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2/21/2023 8:42 AM 14 test-svm_2.txt
アクセスできるようになりました。test-svm_2.txt
であることから確かにsvm_2
にアクセスしていることが分かります。
CIFSサーバーにNetBIOS Aliasを設定してもDNSのCNAMEレコードやSPNは設定されないので注意しよう
Amazon FSx for NetApp ONTAPのCIFSサーバーのNetBIOS Aliasを試してみました。
結果としては、CIFSサーバーにNetBIOS Aliasを設定してもDNSのCNAMEレコードやSPNは設定されないことが分かりました。
SPNの設定はついつい忘れがちなので注意が必要ですね。SPNの設定をしていなくても接続できるのはNTLM認証となっていると思います。意図したNTLM認証なのか意識しましょう。
ファイルサーバー移行を行う場合は、切替作業時に詰まらないように事前にリハーサルをしておくことをオススメします。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!